﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GameStateManagement;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace SuperRyoninRPG.View.Screens
{
	class Role
	{
		protected float move = 50.0f;
		private float y;
		public float Y { get { return y; } }
		
		public string[] Texts { get; set; }
		private EndingScreen screen;
		private SpriteFont font;

		private float fontScale = 1.0f;

		private bool started;
		private bool stop;


		internal Role(EndingScreen screen, params string[] text)
		{
			this.Texts = text;
			this.screen = screen;
			this.font = screen.ScreenManager.Font;
			y = this.screen.ScreenManager.ScreenHeight + this.font.LineSpacing;
		}

		public void Start()
		{
			this.started = true;
		}

		public void Stop()
		{
			this.stop = true;
		}

		/// <summary>
		/// ローディング画面を更新します。
		/// </summary>
		public void Update(GameTime gameTime)
		{
			if (!started || stop)
			{
				return;
			}
			var elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
			y -= this.move * elapsed;
		}
		/// <summary>
		/// エントリの幅をクエリし、画面上でのセンタリングに使用します。
		/// </summary>
		public int GetWidth(int index)
		{
			var width = screen.ScreenManager.Font.MeasureString(Texts[index]).X * fontScale;
			return (int)width; 
		}

		/// <summary>
		/// エントリの幅をクエリし、画面上でのセンタリングに使用します。
		/// </summary>
		public float GetX(int index)
		{
			return screen.ScreenManager.ScreenWidth/2f - GetWidth(index)/2f;
		}



		/// <summary>
		/// ローディング画面を描画します。
		/// </summary>
		public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
		{
			if (!started)
			{
				return;
			}
			for (int i = 0; i < Texts.Length; i++)
			{
				var positionY = y + i * font.LineSpacing * fontScale;
				var position = new Vector2(GetX(i), positionY);
				Vector2 origin = new Vector2(0, font.LineSpacing / 2);
				
				spriteBatch.DrawString(font, Texts[i], position, Color.Black, 0,
						   origin, fontScale, SpriteEffects.None, 0);
				
			}
		}
	}
}
